2

最近、単純な GUI を使用して Java/Swing を使用してアプリケーションのペアを作成しました。

  • JScrollPane
  • 最初のアプリケーションには JScrollPane 内に JTextArea があり、2 番目のアプリケーションには JTable があります。

見た目も機能も問題ありません。Windows 7タブレット(HP Slate)で実行するまで。どちらも空のように見え、真ん中に小さなシンボルがあります。この図は、最初のアプリケーション (JTextArea アプリケーション) がタブレット上でどのように見えるかを示しています。

ここに画像の説明を入力

ここで何が問題で、どうすれば解決できますか?

コードを示していますが、コンピューターを使用すると問題ないように見えるので、これは問題ではないと思います。

import java.io.*;
import java.net.*;

import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.text.DefaultCaret;

class EstacionBase extends JFrame{
    private static final long serialVersionUID = 1L;

private static final String logFile = "log.txt";

private DateFormat df;
private FileWriter logWriter;

private Socket sisnetSocket;
private ServerSocket serverSocket;
private Socket clientSocket;
private BufferedWriter outToPlane;
private BufferedWriter outToDataServer;
private BufferedReader inputFromDataServer;
private JTextArea console;

private boolean terminated;

public EstacionBase() {
    setTitle("Base station");
    createGUI();
    pack();
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);

    try{
        df = new SimpleDateFormat ("[hh:mm:ss]");
        logWriter = new FileWriter(System.getProperty("user.dir") + "\\" + logFile, true);
        serverSocket = new ServerSocket(PORT); // A socket I use for listening for connections
    } catch(IOException e){
        JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
    }

    //mainLoop(); // doing some stuff

    try{
        logWriter.close();
        serverSocket.close();
    } catch(IOException e){
        JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
    }
}

private void createGUI() {
    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    c.fill = GridBagConstraints.BOTH;

    console = new JTextArea(40, 80);
    JScrollPane scroll = new JScrollPane(console);
    DefaultCaret caret = (DefaultCaret) console.getCaret();
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); // Autoscroll
    console.setText("Welcome to base station");
    console.setEditable(false);
    console.setVisible(true);
    add(scroll, c);
}

private void writeToConsole(String msg) throws IOException{
    Date now = new Date();
    String timeStr = df.format(now);
    console.append("\n");
    console.append(timeStr + " " + msg);
    writeToLogFile(msg, timeStr);
}

private void writeToLogFile(String msg, String timeStr) throws IOException{
    logWriter.write(timeStr + " " + msg + CRLF);
        logWriter.flush();
    }

    public static void main(String[] arg) {
        EstacionBase frame = new EstacionBase();
    }

}
4

1 に答える 1

2

これはGridBagLayout問題です。最適な修正方法はわかりませんが、デフォルトのJFrameレイアウトで問題なく動作しますBorderLayout.CENTER。機能的には、これら 3 つのレイアウトには同様の効果があります。

  • BorderLayout.CENTER: のデフォルトJFrame#add()

  • GridLayout(): 1 列、1 行、ギャップなし。

  • GridBagLayout(): デフォルトでGridBagConstraints()は、すべてのフィールドがデフォルト値に設定されています。

余談ですが、Swing GUI オブジェクトは、イベント ディスパッチ スレッド上でのみ構築および操作する必要があります。

于 2012-10-18T14:00:30.973 に答える