Javascript 字体大小从 win 10 更改为 win 11

Javascript font size changes from win 10 to win 11

我们有一个大型 Java 应用程序,在 Win 10 上看起来不错。当我们在 Win 11 上测试它时,大约 1/2 的控件的字体比其他控件小得多。

这是在两台机器上使用相同版本的 Open JDK Java 11 VM。

我的搜索没有找到任何东西,但奇怪的是只有我们的 Java 应用有这个问题。

有一次我确实有一个工具,让我只需单击 java 应用程序 window/control 即可查看有关它的所有信息(颜色、字体大小等)。那是几年前的事了,我现在似乎找不到这样做的人了。

关于为什么某些字体会在 Win 11 上改变大小的任何想法?

您需要了解不同的事情。例如:

属于同一类但类型不同的数据将存储在 class 或结构中。

许多相同类型的数据将存储在一个数组中,或者在此示例中存储在一个 std::vector 中,因为它可以动态增长。

所以,正如您已经做的那样,您将把一行数据,或者用数据库语言,将一条记录的数据放在一个结构中。

所以,您的方法是正确的,定义了 TaxPayer class。但是现在因为要累加多个TaxPayer的一个数据字段的总和,所以需要把所有的TaxPayer放在一个std::vector中,再封装在一个class中。然后向 class 添加其他函数,以计算 std::vector.

中记录 (TaxPayer) 的总和

示例:

#include <string>
#include <vector>

struct TaxPayer {
    std::string taxpayerId{};
    std::string name{};
    std::string address{};
    std::string postcode{};
    int salary{};
    int deductions{};
    double taxDue{};
};
struct TaxPayers {
    std::vector<TaxPayer> taxPayers{};
};

我这里只展示数据成员。您当然可以重用现有功能。

现在,我们基本上只需要添加两个重要的功能:

  1. 将一个源行拆分为其元素,然后将其分配给 taxPayer 数据字段
  2. 读取所有纳税人

第一个任务是拆分所谓的 CSV(逗号分隔值)数据。您将在 Whosebug 上找到至少 1000 个关于如何执行此操作的示例。一个非常流行的方法是使用 std::getline 并读取一部分文本直到分隔符 ','.

为了更省事,首先通过std::getline读取源文件的完整行。然后,这将被放入 stringstream 并从那里完成进一步的数据提取。

所有这些都将嵌入到一个覆盖的“提取”运算符 >> 中,用于处理您的特定数据。

这样一个算子的签名是:

friend std::istream& operator >> (std::istream& is, TaxPayer& tp) 

实现功能后,只需使用>>运算符,即可读取一整行并一步解析。

在 TaxPayers class 中,您还需要定义这样的运算符并使用上述定义中的提取器读取所有行。

通过这种方法,通过将一个大任务拆分成多个小任务,最终解决方案将变得非常简单。

最后但同样重要的是,我们需要为您添加 std::vector 中数据的累积功能。这可以通过一个简单的循环来完成,或者更高级一点,使用 std::accumulate.

您可以使用以下示例作为重构现有代码的想法:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>

struct TaxPayer {
    // Data part
    std::string taxpayerId{};
    std::string name{};
    std::string address{};
    std::string postcode{};
    int salary{};
    int deductions{};
    double taxDue{};

    // Extractor
    friend std::istream& operator >> (std::istream& is, TaxPayer& tp) {
        // Read a complete line
        std::string line{};
        if (std::getline(is, line) and not line.empty()) {


            // Put it into a stringstream for further extraction
            std::istringstream iss{ line };

            // Now, extract the data parts
            std::getline(iss, tp.taxpayerId, ',');
            std::getline(iss, tp.name, ',');
            std::getline(iss, tp.address, ',');
            std::getline(iss, tp.postcode, ',');

            // Read and convert
            std::getline(iss, line, ',');
            tp.salary = std::stoi(line);

            std::getline(iss, line, ',');
            tp.deductions = std::stoi(line);

            std::getline(iss, line, ',');
            tp.taxDue = std::stod(line);
        }
        return is;
    }
    // Simple inserter
    friend std::ostream& operator << (std::ostream& os, const TaxPayer& tp) {
        return os << tp.taxpayerId << ' ' << tp.name << ' ' << tp.address << ' ' << tp.postcode
            << ' ' << tp.salary << ' ' << tp.deductions << ' ' << tp.taxDue << '\n';
    }

};
struct TaxPayers {
    // Data
    std::vector<TaxPayer> taxPayers{};

    // Sum functions
    int sumSalary() {
        int result{};
        for (const TaxPayer& taxPayer : taxPayers)
            result += taxPayer.salary;
        return result;
    }
    int sumDeductions() {
        int result{};
        for (const TaxPayer& taxPayer : taxPayers)
            result += taxPayer.deductions;
        return result;
    }

    // Extractor
    friend std::istream& operator >> (std::istream& is, TaxPayers& tp) {
        // clar old data
        tp.taxPayers.clear();

        // Read all new existing data and store in vector
        TaxPayer taxPayer{};

        while (is >> taxPayer)
            tp.taxPayers.push_back(taxPayer);
        return is;
    }
    // Simple inserter
    friend std::ostream& operator << (std::ostream& os, const TaxPayers& tp) {
        for (const TaxPayer& taxPayer : tp.taxPayers)
            os << taxPayer;
        return os;
    }


};

// Same as a file, I just use it here for better visibility
std::istringstream sourceFile{ R"(7101003,Mike,23 boinig road,2615,48000,12000,0
7201003,Jane Philips,29 boinig cresent,2616,47000,12000,0
7301003,Philip Jane,23 bong road,2615,49000,000,0
7401004,Peta,23 bong bong road,2615,148000,19000,0
7101205,Abdulla,23 Station st,2615,80000,21000,0)" };

int main() {

    TaxPayers taxPayers{};

    // Read and parse all tax payers
    sourceFile >> taxPayers;

    // Debug output: Show, what we just read
    std::cout << taxPayers;

    // Show sums
    std::cout << "\n\n\nSummary\n\nSalary:\t\t" << taxPayers.sumSalary() << "\nDeductions:\t" << taxPayers.sumDeductions() << '\n';
}