2

次のことを達成するために、どの Swing コンポーネントを選択すればよいかアドバイスが必要です。

「テーブル」構造のようなものがあり、「追加」ボタンをクリックするたびに、「テーブル」に別の「行」を挿入する必要があります。各行は 2 で構成されJTextFieldます。GridLayout (下の図で使用されているレイアウト) で私が抱えている問題は、別の行を追加すると、テキスト フィールドの高さが短くなり、それが望ましくないことです (右の図)。すべての行で同じ高さを維持したい。

私がやりたいのは、余分な行を最後の行の下に表示してJScrollPane、スクロールして表示できるようにすることです。

ここに画像の説明を入力

GridLayout ではなく別のレイアウトを使用する必要がありますか? たぶん、AbsoluteLayout か、Table Component を使用しているのでしょうか?

ありがとう。

4

3 に答える 3

7

JTable を使用して、行の高さを任意に設定します。例えば:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class TableEg {
   private static final int ROW_HEIGHT = 40;
   private static final String[] TABLE_COLUMNS = {"Foo", "Bar"};

   private static void createAndShowGui() {
      final DefaultTableModel tableModel = new DefaultTableModel(TABLE_COLUMNS, 2);
      JTable table = new JTable(tableModel );
      table.setRowHeight(ROW_HEIGHT);
      JScrollPane scrollpane = new JScrollPane(table);

      JButton addRowBtn = new JButton(new AbstractAction("Add Row") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            tableModel.addRow(new String[]{"", ""});
         }
      });
      JPanel btnPanel = new JPanel();
      btnPanel.add(addRowBtn);

      JFrame frame = new JFrame("TableEg");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(scrollpane, BorderLayout.CENTER);
      frame.getContentPane().add(btnPanel, BorderLayout.PAGE_END);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
于 2012-07-02T01:22:21.230 に答える
2

JTextField を Jpanel に追加し、Jpanel を JScrollPane に追加するとします。ここで、JScrollPane に preferredSize を設定します (固定の表示可能領域が必要なため) が、その時点で配置する JTextField の量に基づいて JPanel の高さを動的に変更します。

つまり、2 列の GridLayout で設定された Jpanel に 2 つの JTextField があるとします。JTextField は Jpanel の高さ全体をとります。ただし、さらに 2 つ含めると、この 2 つのスペースを確保する必要があるため、短縮されます。

「100」の高さに設定された JPanel に 2 つの行があることに注意してください。各行は「50」を使用します。別の行を追加して JPanel の高さを「150」に変更すると、各 JTextField は引き続き「50」ピクセルになります。

私は初心者であり、100% 正しくない可能性があります。その場合は「ごめんなさい」です。私はただ助けが欲しかった。

于 2012-11-16T21:08:08.557 に答える
1

これを試して....

JScrollPane scroll = new JScrollPane(Your_Table);

これにより、テーブルがスクロールします....

于 2012-07-02T07:46:35.223 に答える