2012-12-11 35 views
2

可能重复:
how to implement UTF-8 format in Swing application?对Java Swing的UTF-8支持问题?

在Swing应用程序我有发送按钮,一个文本区域和文本字段。

如果我按下发送键,我需要将文本从文本字段发送到文本区域

它在英语而不是在当地语言工作正常...

package package1; 

import java.awt.*; 
import java.awt.event.*; 
import java.io.UnsupportedEncodingException; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.border.Border; 

class AEvent extends JFrame implements ActionListener{ 

    private static final long serialVersionUID = 1L; 
    JTextField tf; 
    JTextArea area ; 
    Border border; 

    AEvent(){ 

     area = new JTextArea(200,200); 
     area.setBounds(60,200,300,200); 

     border = BorderFactory.createLineBorder(Color.BLACK); 
     area.setBorder(border); 

     tf=new JTextField(); 
     tf.setBounds(60,70,150,20); 

     Button b=new Button("click me"); 
     b.setBounds(100,120,80,30); 

     b.addActionListener(this); 

     add(b); 
     add(tf); 
     add(area); 

     addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent we){ 
       System.exit(0); 
      } 
     }); 

     setSize(600,600); 
     setLayout(null); 
     setVisible(true); 

    } 

    public void actionPerformed(ActionEvent e){ 
     String s = null; 
     try { 
      s = new String(tf.getText().getBytes(), "UTF-8"); 
     } catch (UnsupportedEncodingException e1) { 
      e1.printStackTrace(); 
     } 
     area.setText(s); 
    } 

    public static void main(String args[]){ 
     new AEvent(); 

    } 
} 

请给一些想法或一些代码,这将帮助我解决这个问题..

+0

本地语言中行的例子是什么?尝试解决'JTextAre.setFont()' –

+0

这应该工作。我也会怀疑一些字体问题,正如@NikolayKuznetsov所示。 –

+0

@UwePlonus:这*是一个确切的副本。他甚至复制了无用的重复点。 –

回答

-1

我试图做你的目标与本地语言,它为我工作得很好。您能否指定您正在考虑使用哪种本地语言以及您在使用哪种IDE?

+3

这是更多评论;) – MadProgrammer

+0

这是更多的评论;)[2] –

1

如果平台默认编码不是utf-8,则会中断。 tf.getText().getBytes()为您提供平台默认编码中的字节。如果字节的实际编码不是utf-8,则new String(tf.getText().getBytes(), "UTF-8")将创建损坏的字符串。

尝试

public void actionPerformed(ActionEvent e){ 
    area.setText(tf.getText()); 
} 
+0

我用area.setText(tf.getText()); 。但不起作用..它显示了许多方框在文本框和????????在textarea。 –

+0

如果您在调试器中查看'tf.getText()'的结果,字符串是否可以正常显示,您只需要获取'????????'? –

0

为什么呢?

String s = null; 
try { 
    s = new String(tf.getText().getBytes(), "UTF-8"); 
} catch (UnsupportedEncodingException e1) { 
    e1.printStackTrace(); 
} 
area.setText(s); 

为什么不干脆:

area.setText(tf.getText()); 
+0

我用area.setText(tf.getText()); 。 bue不起作用.. –

1

好了,如果你还是不相信菲利普的回答,这里是这表明了很好的答案完全运行的代码。我试着用重音字符,它工作得很好。如果中断,请说明如何。

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

class AEvent implements ActionListener { 

    private JTextField tf; 
    private JTextArea area; 
    private JFrame frame; 

    protected void initUI() { 
     frame = new JFrame(); 
     frame.setLayout(new GridBagLayout()); 
     area = new JTextArea(30, 80); 
     area.setEditable(false); 
     area.setFocusable(false); 
     tf = new JTextField(); 
     JButton b = new JButton("click me"); 
     b.addActionListener(this); 

     JScrollPane scrollPane = new JScrollPane(area); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.insets = new Insets(5, 5, 5, 5); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     frame.add(scrollPane, gbc); 
     gbc = new GridBagConstraints(); 
     gbc.weightx = 1.0; 
     gbc.insets = new Insets(5, 5, 5, 5); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     frame.add(tf, gbc); 
     gbc = new GridBagConstraints(); 
     gbc.insets = new Insets(5, 5, 5, 5); 
     frame.add(b, gbc); 
     frame.getRootPane().setDefaultButton(b); 
     frame.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent we) { 
       System.exit(0); 
      } 
     }); 
     frame.pack(); 
     frame.setVisible(true); 
     tf.requestFocusInWindow(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     area.append(tf.getText() + "\n"); 
     tf.setText(""); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new AEvent().initUI(); 
      } 
     }); 
    } 
}