1

m JsliderとJlabelをPAGE_ENDに並べて追加しようとすると、それぞれをonに追加できますが、両方に.add( "components name" .PAGE_END)を追加すると、1つが存在しますか?

基本的に、スライダーとその右側の横にあるjlabelを作成したいのですが、とにかく誰かが助けてくれますか、ありがとう。

パッケージの割り当て。

//import java.awt.FlowLayout;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MyControlPanel extends javax.swing.JPanel {

JSlider slider;
JLabel sliderLabel;
JLabel blank;

public MyControlPanel() {


slider = new JSlider();
slider.setValue(50);
slider.addChangeListener(new MyChangeAction());
slider.setMajorTickSpacing(10); 
slider.setPaintLabels(true); 
slider.setPaintTicks(true); 
slider.setBounds(300, 50, 100, 50);
sliderLabel = new JLabel("50");
blank = new JLabel("     ");

JTextField boundary_length = new JTextField("Boundary Length");
JTextField area = new JTextField("Area");

setLayout(new BorderLayout());


this.add(slider, BorderLayout.PAGE_END);
this.add(sliderLabel, BorderLayout.LINE_END);
this.add(area);
this.add(boundary_length);
this.add(blank, BorderLayout.LINE_START);
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>                        
// Variables declaration - do not modify                     
// End of variables declaration                   

public class MyChangeAction implements ChangeListener{

//complete code here

public void stateChanged(ChangeEvent ce) 
{ 
int value = slider.getValue(); 
String str = Integer.toString(value); 
sliderLabel.setText(str); 


}

} // end class
4

1 に答える 1

3

BorderLayoutを使用してスライダーとラベルの両方を配置する代わりに、両方のコンポーネントを含むパネルを作成してから、BorderLayoutを使用してパネルを配置します。

交換

this.add(slider, BorderLayout.PAGE_END);
this.add(sliderLabel, BorderLayout.LINE_END);

JPanel sliderPanel = new JPanel();
sliderPanel.setLayout( new FlowLayout(FlowLayout.TRAILING));
sliderPanel.add(slider);
sliderPanel.add(sliderLabel);
this.add(sliderPanel, BorderLayout.PAGE_END);

これは、ダイアログの下部に[OK]ボタンと[キャンセル]ボタンを配置するために使用したコードに基づいています。これはコンパイルされないかもしれません-しかし、あなたは考えを理解します。FlowLayoutの引数をいじって、希望の外観になるまでスライダーパネルに追加する順序を変更します。

ところで、GUIビルダーを使用せずに自分でレイアウトを行っているので、initComponentsメソッドと周囲のコメントを削除した方がよいでしょう。Netbeansを使用していて、最初にGroupLayoutを使用するように構成されたパネルを作成し、Netbeansがそのコードを挿入したと思います。今、それは邪魔になっています。

于 2012-10-20T23:42:33.377 に答える