- 締切済み
テキストエリアの大きさをドラッグで調節したい
_____________________________ || | | | etc | | | ============================= | | | JTextArea | | | | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 上の図の=の部分を上下にドラッグすると、 JTextAreaの大きさを調節できるようにした いのですが、どうしたら良いのでしょうか? ソースは次のようにしています。 JPanel mainPanel = new JPanel(new GridLayout(2,1)); JPanel panel_1 = new JPanel(); panel_1.add(...); : etc部の追加 : mainPanel.add(panel_1); JPanel panel_2 = new JPanel(); panel_2.add(textArea); mainPanel.add(panel_2); getContentPane().add(mainPanel);
- you-mor
- お礼率100% (2/2)
- Java
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- takaP-
- ベストアンサー率79% (83/105)
javax.swing.JSplitPane を使えば良いと思います。 上のソースで言えば、mainPanelをJPanelじゃなくJSplitPaneにすれば良いのではないでしょうか。 JSplitPane split=newJSplitPane(JSplitPane.VERTICAL_SPLIT); split.setTopComponent(panel_1); split.setBottomComponent(panel_2); getContentPane().add(split); 大雑把ですが。
関連するQ&A
- SwingでgetContentPaneのエラーです、お願いします
今晩は、java勉強中のものです、宜しくお願いします。 下のようなプログラムを組んでみましたが、「型JFrameから非staticメソッドgetContentPane()にstatic参照 することは出来ません」というエラーコードです。 原因が良く分かりません、どなたか教えて下さい。 いくら考えても原因がよく分かりません、宜しくお願いします。 ================================================================ public class Panel_train extends JFrame{ public static void main(String[] args) { Container cnt = getContentPane(); JPanel jpanel = new JPanel(); JTextArea jtext = new JTextArea("Hello World", 100, 50); jpanel.add(jtext); cnt.add(jpanel, BorderLayout.CENTER); JFrame frame = new JFrame("テスト"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 100); frame.setVisible(true); } }
- ベストアンサー
- Java
- 同じコンポーネントを複数の場所に配置したい
SWINGを使ってGUIを作っています。 ボタンやテキストエリアを張り付けたパネルを別のパネルに複数貼り付けようしていますが、うまくいきません。 症状としては、最後に張り付けたところだけ表示されます。 簡単なプログラムを書いておきます。 JPanel mainpanel = new JPanel();//panelを複数貼り付けるパネル JPanel panel1 = new JPanel();//複数表示するパネル JButton btn1 = new JButton("btn1");//panel1貼り付けるボタン panel1.add(btn1); mainpanel.add(panel1);//一度目の貼り付け mainpanel.add(panel1);//二度目の貼り付け とすると二度目の貼り付けだけ表示されます。 同じものを複数の個所に表示するのは本来できないものなのでしょうか? よろしくお願いします。
- ベストアンサー
- Java
- GridLayoutのPanel上のButton
GridLayoutのPanel上のButton横サイズを取得したいのですが、 button1.getWidth()==0 と出てしまいます。 フレームやパネルのサイズをボタン数で割れば出るのですが、 そうではなく、ボタンのサイズを取得したいです。 ご存知の方がおられましたら教えて下さい。 //----以下ソースです---- import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class ButtonSizeOnGridLayout extends JFrame { public ButtonSizeOnGridLayout() { JPanel panel1 = new JPanel(new GridLayout(0, 5)); JButton button1 = new JButton(); button1.setPreferredSize(new Dimension(150, 150)); System.out.println("button1.getWidth()==" + button1.getWidth());//出力:0 panel1.add(button1); this.getContentPane().add(panel1); this.pack(); this.setVisible(true); } public static void main(String a[]) { new ButtonSizeOnGridLayout(); } }
- ベストアンサー
- Java
- JPanelの重ね方/OverlayLayout他
添付した画像のような「ピラミッドのように大きいコンポーネントの上にだんだん小さなコンポーネントを重ねていく」のではないコンポーネントの重ね方がしたいです。そのようなことは可能なのでしょうか? やりたいこととしては、メインとなるパネルのその上で別のレイアウトをしたパネルを重ねたいです。 普通のレイアウトマネージャでaddで重ねるのでは、どうやってもうまくいきません。 OverlayLayoutも試してみましたが、以下の二つのパターンではうまくいきませんでした。 注:TopPanel,MainPanel,StringPanelはJPanelを継承した自作のクラスです 理想はMainPanel < StringPanel < TopPanelなのですが・・ JPanel basePanel = new JPanel(); basePanel.setLayout(new OverlayLayout(basePanel)); topPanel = new TopPanel(); topPanel.setOpaque(false); basePanel.add(topPanel); mainPanel = new MainPanel(); mainPanel.setLayout(new BorderLayout()); stringPanel = new StringPanel(); stringPanel.setPrintSpeed(50); stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); mainPanel.add("South", stringPanel); basePanel.add(mainPanel); add(basePanel); この場合だと、MainPanel < TopPanel < StringPanelの関係になってしまいます JPanel basePanel = new JPanel(); basePanel.setLayout(new OverlayLayout(basePanel)); mainPanel = new MainPanel(); mainPanel.setLayout(new BorderLayout()); stringPanel = new StringPanel(); stringPanel.setPrintSpeed(50); stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); mainPanel.add("South", stringPanel); basePanel.add(mainPanel); topPanel = new TopPanel(); topPanel.setOpaque(false); basePanel.add(topPanel); add(basePanel); こうするとTopPanelの描画が見えなかったのでおそらくTopPanel < MainPanel < StringPanelとなってます。 ご教示願います・・!
- 締切済み
- Java
- Layoutについて
TextFiledを縦31、横7でレイアウトしたいのですが、 MyPanel(){ EventHandler eh = new EventHandler(this); JPanel ptext = new JPanel(); JPanel pbtn= new JPanel(); 中略 this.setLayout(new FlowLayout()); this.add(ptext,new FlowLayout(FlowLayout.CENTER,0,0)); this.add(pbtn, BorderLayout.SOUTH); とすると、横一列に表示されるのですが、どうしたら 指定したとおりになるのでしょうか? これは、mainで定義してます。 Container cont = frame.getContentPane(); cont.add(panel); よろしくお願いします。
- ベストアンサー
- Java
- GradientPaint を JPaneに仕組む
JPaneにGradientPaint を使って書いたグラデーションを表示させたいのですが、 Jlabelのようにaddで追加できず、実装方法が解りません。 アドバイスをいただけないでしょうか? protected void paintComponent(Graphics g) { JPanel panel = new JPanel(); Graphics2D g2 = (Graphics2D)g; GradientPaint gp = new GradientPaint(10,10,Color.ORANGE,60,60,Color.GREEN); g2.setPaint(gp); g2.fillRect(10, 10, 100, 100); JLabel label = new JLabel("Hello World!!"); getContentPane().add(label); Container contentPane = getContentPane(); contentPane.add(panel); }
- ベストアンサー
- Java
- Java(指定した配列に値が格納されない)
指定した配列に対して、値(画像)が挿入されずに困っています。 プログラムの概要を説明します。 パネル上に2次元配列[10][10]のボタンと3つのコンボボックスを造りました。 そしてコンボボックスは、行のインデックスを指定するもの、列のインデックスを指定するもの、 指定した場所に対して値(画像)を設定するもの、の3つでこれらが左から並んでいます。 現在の状況では、行と列に対してどのインデックスを指定しても、必ず[2][2]の値(画像)が変わってしまいます。 まだJavaは経験が浅いので、理由がわからず困っています。 よろしくお願いします。 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class GUISwing18 extends JFrame implements ActionListener{ JButton[][] button = new JButton[10][10]; //ボタンに挿入する画像 final ImageIcon black = new ImageIcon("./image/black.gif"); final ImageIcon white = new ImageIcon("./image/white.gif"); final ImageIcon empty = new ImageIcon("./image/empty.gif"); public static void main(String[] args) { new GUISwing18(); } GUISwing18(){ getContentPane(); JPanel mainpanel = new JPanel(); mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.Y_AXIS)); JPanel subpanel = new JPanel(); subpanel.setLayout(new GridLayout(10,10)); //ボタンを作る for(int i = 0 ; i < 100 ; i++){ button[i/10][i%10] = new JButton(black); subpanel.add(button[i/10][i%10]); } mainpanel.add(subpanel); //コンボボックスを設定 JPanel cb = new JPanel(new GridLayout(1,0)); JComboBox row = new JComboBox(); JComboBox side = new JComboBox(); JComboBox value = new JComboBox(); row.addItem("0"); side.addItem("0"); value.addItem("empty"); row.addItem("1"); side.addItem("1"); value.addItem("black"); row.addItem("2"); side.addItem("2"); value.addItem("white"); row.addItem("3"); side.addItem("3"); row.addItem("4"); side.addItem("4"); row.addItem("5"); side.addItem("5"); row.addItem("6"); side.addItem("6"); row.addItem("7"); side.addItem("7"); row.addItem("8"); side.addItem("8"); row.addItem("9"); side.addItem("9"); cb.add(side); cb.add(row); cb.add(value); row.addActionListener(this); side.addActionListener(this); value.addActionListener(this); mainpanel.add(cb); getContentPane().add(mainpanel); setSize(350,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { JComboBox row = (JComboBox)e.getSource(); JComboBox side = (JComboBox)e.getSource(); JComboBox value = (JComboBox)e.getSource(); int x = row.getSelectedIndex(); int y = side.getSelectedIndex(); int z = value.getSelectedIndex(); switch(z){ case 0: button[x][y].setIcon(empty);break; case 1: button[x][y].setIcon(black);break; case 2: button[x][y].setIcon(white); break; } } }
- ベストアンサー
- Java
- テキストフィールドの文字をテキストエリアに表示する
エラーも例外もないです。 但し今回の内容の"テキストフィールドに打ち込みエンターキーを文字をテキストフィールドに表示" が満たしてないですとりあえずソース乗せます mport java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyMemo { public static void main(String[] args) { JFrame Frame = new JFrame("課題"); Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Frame.setSize(500, 500); Frame.setLocationRelativeTo(null); Container contentPane = Frame.getContentPane(); // テキストフィールドのインスタンスを生成 final JTextField text = new JTextField();// テキストエリアのインスタンスを生成 text.addActionListener(new MyActionListener()); Frame.setVisible(true); final JTextArea Area = new JTextArea(5,0); // スクロールペインにテキストエリアを追加 JScrollPane scrollPane = new JScrollPane(Area); // パネルをコンポーネントに配置 contentPane.add(text, BorderLayout.NORTH); contentPane.add(scrollPane, BorderLayout.CENTER); Frame.setVisible(true); } static class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { } } } どう文字をテキストエリアに表示したらいいのかわからなくて質問させていただきました。 よろしくお願いします。
- ベストアンサー
- Java
- JPanelの切り替えと再描画
ContainerにJPanelをaddし、ボタンを押すことで現在addされているJPanelとは違うJPanelを生成し、再描画させようとしているのですが、うまくいかないため、質問致しました。 -- src --- public class Test extends JFrame implements ActionListener { Container container; JPanel panel; JButton btn; public Test() { container = getContentPane(); container.setLayout(new BorderLayout()); // ボタン用パネル JPanel btnp = new JPanel(); btnp.setLayout(new FlowLayout()); container.add(btnp, BorderLayout.NORTH); btn = new JButton("aaa"); btn.addActionListener(this); btnp.add(btn); // 対象のパネル panel = new JPanel(); (略)panelの設定 container.add(panel, BorderLayout.CENTER); setVisible(true); setBounds(50, 50, 300, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) { if (e.getSource() == btn) { container.remove(1); panel = new JPanel(); // 本来はJPanelを継承したクラスをnewしています container .add(panel); repaint(); // ※ } } public static void main(String args[]) { Test t = new Test(); } } ※の箇所をcontainer.repaint() にしたり、paintImmediaely() にしたり出来そうな事を色々試したつもりではいるのですが、うまくいきません… ボタン押下後に、ウィンドウの枠をクリックすると描画されるのですが、いまいちよくわかりません… なにか分かる方いらっしゃいましたらご教授願います。
- 締切済み
- Java
- JTextFieldの大きさ
すべて記述すると長くなるので、必要なところを抜粋したコードです。 JPanel jpnl1 = new JPanel(new GridLayout(1, 2)); JLabel jlbl = new JLabel("文字列"); JTextField jtf = new JTextField(); Container cont = getContentPane(); jpnl1.setPreferredSize(new Dimension(20, 15)); jpnl1.add(jlbl); jpnl2.add(jtf); cont.add(jpnl1, BorderLayout.CENTER); これで実行(別クラスから呼び出し)すると、JTextFieldの大きさが不必要に大きくなってしまいます(6行目の設定が効かない)。 JTextFieldを自分の思ったようなサイズにすることはできないのでしょうか? 親クラス・・・JFrame 別クラスからは、setBounds(100, 100, 300, 130)として呼び出しています(setVisible(ture)) 環境・・・WindowXP、JDK1.5.09 JRE1.5.09
- ベストアンサー
- Java
お礼
早速の御回答ありがとうございます。 うまくいきました。 ありがとうございました。