Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Konstantinov
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 7
1

Отображение кириллицы на swing

26.12.2015, 13:28. Просмотров 801. Ответов 1

Есть код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package com.company;
 
import java.math.MathContext;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.math.*;
 
public class Main extends JFrame {
    private static final int
            BYTE = 0,
            KBYTE = 1,
            MBYTE = 2,
            GBYTE = 3,
            TBYTE = 4,
            BIT = 5,
            KBIT = 6,
            MBIT = 7,
            GBIT = 8,
            TBIT = 9;
 
    private static final BigDecimal
            _K = new BigDecimal("1024"),
            _M = _K.multiply(_K),
            _G = _M.multiply(_K),
            _T = _G.multiply(_K),
            _1e3 = new BigDecimal("1e3"),
            _1e6 = new BigDecimal("1e6"),
            _1e9 = new BigDecimal("1e9"),
            _1e12 = new BigDecimal("1e12"),
            _8 = new BigDecimal("8");
 
    private static final MathContext RM = new MathContext(1, RoundingMode.HALF_EVEN);
 
    private JPanel main_panel;
    private JPanel source_panel;
    private JTextField source_field;
    private JComboBox source_unit_box;
    private DefaultComboBoxModel unit_model;
    private JTextPane result_pane;
 
    private Main()
    {
        main_panel = new JPanel();
        main_panel.setLayout(new BorderLayout());
        this.setContentPane(main_panel);
        source_panel = new JPanel();
        source_panel.setLayout(new FlowLayout(FlowLayout.LEFT));
        source_field = new JTextField();
        source_field.setPreferredSize(new Dimension(350, 25));
        source_field.getDocument().addDocumentListener(new DocumentListener()
        {
            public void insertUpdate(DocumentEvent e)
            {
                process();
            }
 
            public void removeUpdate(DocumentEvent e)
            {
                process();
            }
 
            public void changedUpdate(DocumentEvent e)
            {
                process();
            }
        });
        source_panel.add(source_field);
        source_unit_box = new JComboBox();
        source_unit_box.setPreferredSize(new Dimension(80, 25));
        source_unit_box = new JComboBox();
        source_unit_box.setEditable(false);
        unit_model = (DefaultComboBoxModel)source_unit_box.getModel();
        unit_model.addElement("байт");
        unit_model.addElement("килобайт");
        unit_model.addElement("мегабайт");
        unit_model.addElement("гигабайт");
        unit_model.addElement("терабайт");
        unit_model.addElement("бит");
        unit_model.addElement("килобит");
        unit_model.addElement("мегабит");
        unit_model.addElement("гигабит");
        unit_model.addElement("терабит");
        source_panel.add(source_unit_box);
        source_unit_box.addItemListener(new ItemListener()
        {
            public void itemStateChanged(ItemEvent e)
            {
                process();
            }
        });
        main_panel.add(source_panel, BorderLayout.NORTH);
        result_pane = new JTextPane();
        result_pane.setBorder(BorderFactory.createEtchedBorder());
        result_pane.setPreferredSize(new Dimension(430, 200));
        result_pane.setEditable(false);
        main_panel.add(result_pane, BorderLayout.CENTER);
        this.setTitle("Преобразование единиц объема информации");
        this.pack();
    }
 
    private void process()
    {
        String str = source_field.getText();
        str = str.replace(',', '.');
        BigDecimal source = null;
        try
        {
            source = new BigDecimal(str);
        }
        catch(NumberFormatException exc)
        {
            result_pane.setText("");
            return;
        }
        try
        {
            BigDecimal bits = null;
            String source_unit = null;
            int source_unit_index = source_unit_box.getSelectedIndex();
            switch(source_unit_index)
            {
                case BYTE: bits = source.multiply(_8); source_unit = "байт"; break;
                case KBYTE: bits = source.multiply(_8).multiply(_K); source_unit = "килобайт"; break;
                case MBYTE: bits = source.multiply(_8).multiply(_M); source_unit = "мегабайт"; break;
                case GBYTE: bits = source.multiply(_8).multiply(_G); source_unit = "гигабайт"; break;
                case TBYTE: bits = source.multiply(_8).multiply(_T); source_unit = "терабайт"; break;
                case BIT: bits = source; source_unit = "бит"; break;
                case KBIT: bits = source.multiply(_1e3); source_unit = "килобит"; break;
                case MBIT: bits = source.multiply(_1e6); source_unit = "мегабит"; break;
                case GBIT: bits = source.multiply(_1e9); source_unit = "гигабит"; break;
                case TBIT: bits = source.multiply(_1e12); source_unit = "терабит"; break;
            }
            if(bits==null)
                throw new Exception();
            StringBuffer sb = new StringBuffer(1000);
            String ls = "\r\n";
            sb.append(source.toString()+" "+source_unit+" это:"+ls);
            if(source_unit_index!=BYTE) sb.append(bits.divide(_8).toPlainString()+" байт"+ls);
            if(source_unit_index!=KBYTE) sb.append(bits.divide(_8).divide(_K).toPlainString()+" килобайт"+ls);
            if(source_unit_index!=MBYTE) sb.append(bits.divide(_8).divide(_M).toPlainString()+" мегабайт"+ls);
            if(source_unit_index!=GBYTE) sb.append(bits.divide(_8).divide(_G).toPlainString()+" гигабайт"+ls);
            if(source_unit_index!=TBYTE) sb.append(bits.divide(_8).divide(_T).toPlainString()+" терабайт"+ls);
            if(source_unit_index!=BIT) sb.append(bits.toPlainString()+" бит"+ls);
            if(source_unit_index!=KBIT) sb.append(bits.divide(_1e3).toPlainString()+" килобит"+ls);
            if(source_unit_index!=MBIT) sb.append(bits.divide(_1e6).toPlainString()+" мегабит"+ls);
            if(source_unit_index!=GBIT) sb.append(bits.divide(_1e9).toPlainString()+" гигабит"+ls);
            if(source_unit_index!=TBIT) sb.append(bits.divide(_1e12).toPlainString()+" терабит"+ls);
            String text = sb.toString().substring(0, sb.length()-ls.length());
            result_pane.setText(text);
        }
        catch (Exception exc)
        {
            result_pane.setText("Error! "+exc.getMessage());
            return;
        }
    }
 
    public static void main(String[] args)
    {
        Main f = new Main();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}
По сути всё хорошо, но когда я запускаю программу, вместо нормальной кириллицы показываются прямоугольники с чёрным border ом и белым фоном. Я уверен, что дело в кодировке. Что делать?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2015, 13:28
Ответы с готовыми решениями:

Swing, отображение JMenu на фрейме
пытаюсь отобразить меню на фрейме,не совсем получается... public class InterfacePhoneClass; { ...

Отображение JTAble на форме SWING
Здравствуйте. Делаю приложение Swing. Необходимо было сделать в таблице JTable колонку с кнопками....

Отображение математических формул в компонентах swing
Здравствуйте, уважаемые киберфорумчане. подскажите пожалуйста, есть ли библиотека/компоненты для...

Как включить отображение кириллицы в консоли Java?
Среда разработки Intellij IDEA. Может есть какие-то команды вроде setlocale, как в C++?

Отображение кириллицы
здравствуйте, строки use open qw(:utf8); #считать открываемые файлы в кодировке utf-8...

1
megastriker
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
28.12.2015, 09:49 2
Для начала замените всю кириллицу на транслит, предположим. Если все выводится ок, то попробуйте преобразование:

Java
1
2
3
4
5
6
// Данные в кодировке КОИ-8
byte[] koi8Data = ...;
// Преобразуем из КОИ-8 в Unicode
String string = new String(koi8Data,"KOI8_R");
// Преобразуем из Unicode в Windows-1251
byte[] winData = string.getBytes("Cp1251");
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2015, 09:49

Отображение кириллицы
Здраствуйте, недавно установил win8.1 английскую, теперь некоторые txt файлы написанные...

Отображение кириллицы в Delphi7
Здравствуйте. У меня стоит английская Windows XP SP3. Установлен пакет MUI. Проблема в том, что...

Отображение кириллицы в listBox
Доброго времени суток. Задача состоит в том, чтобы прочитать xml фаил и отобразить его в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.