Ich bin interessiert an einen Container erstellen, die Schaltflächen dynamisch erhalten. Wenn die Containerbreite erreicht ist, werden die Schaltflächen unterhalb der ersten Schaltflächenzeile eingefügt und eine vertikale Bildlaufleiste muss angezeigt werden. Obwohl die horizontale Bildlaufleiste nicht angezeigt werden kann, könnte der Container horizontal skalierbar sein. Als Beispiel: JPanel und JScrollPane mit nur vertikalen Blättern
Mit Klick auf jbutton1 fügen Sie neue Schaltflächen entsprechend der Panelgröße hinzu. In diesem Bild ist es nicht möglich, die vertikale Bildlaufleiste zu sehen, und das ist das Problem.
Der Code, den ich verwendet wird, ist der Balg ein:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ScrollPanelTest;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JScrollBar;
/**
*
* @author leandro.lima
*/
public class ScrollPane extends javax.swing.JFrame {
public int count = 1;
private WrapLayout layout = new WrapLayout(FlowLayout.LEADING, 5, 5);
/**
* Creates new form ScrollPane
*/
public ScrollPane() {
initComponents();
}
/**
* This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setMinimumSize(new java.awt.Dimension(0, 0));
jPanel1.setPreferredSize(new java.awt.Dimension(0, 0));
java.awt.FlowLayout flowLayout1 = new java.awt.FlowLayout();
flowLayout1.setAlignOnBaseline(true);
jPanel1.setLayout(flowLayout1);
jScrollPane1.setViewportView(jPanel1);
jPanel1.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jButton1)
.addContainerGap(327, Short.MAX_VALUE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(163, Short.MAX_VALUE)
.addComponent(jButton1))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1)
.addGap(34, 34, 34)))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
final JButton button = new JButton();
button.setPreferredSize(new Dimension(100, 100));
button.setSize(new Dimension(100, 100));
button.setAction(new AbstractAction("<html><center><h4>Button " + (count++) + "</h4><br>Remove me</center></html>") {
@Override
public void actionPerformed(ActionEvent ae) {
jPanel1.remove(button);
jPanel1.getRootPane().repaint();
getContentPane().repaint();
}
});
jPanel1.add(button);
jPanel1.getRootPane().repaint();
getContentPane().repaint();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
if ("Windows".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
}
//</editor-fold>
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ScrollPane().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
}
Obs: Ich konnte nicht einen Weg finden, die Platte neu zu zeichnen, wenn die Tasten sind hinzufügen, wenn Sie wissen, bitte zeigen Sie mir auch.
Danke!