darq
30-09-2010, 11:19
Ciao a tutti, sono nuovo del forum (anche se ogni tanto vi leggo :p).
...Passo subito al problema. : -)
Ho creato un semplice JScrollPane contenente una JTable e il suo relativo JTableHeader.
Quando la finestra viene ridimensionata verticalmente la scrollbar appare sotto l'header della JTable lasciando in alto a destra una 'zona vuota' evidenziata in rosso e corrispondente al colore di background dello JScrollPane.
Quello che invece vorrei riuscire a fare è affiancare orizzontalmente la vertical scrollbar all'header.
Ho fatto due prove per riuscire a risolvere il problema:
1) Ho aggiunto semplicemente un pulsante disabilitato per coprire l'area vuota.
Graficamente è migliore, ma è una soluzione stupida. :D
2) Usando 'BorderLayout.EAST' ho aggiunto la JScollBar ricavata dallo JScrollPane al JFrame. In questo modo sono riuscito ad affiancare la scrollbar all'header della JTable, ma cosi' risulta sempre visibile (indipendentemente dalla VerticalScrollBarPolicy dello JScrollPane) :(
Qualcuno ha qualche altra 'alternativa' da proporre? :)
Posto il codice:
(PS: non fate caso al 'contenuto' della tabella : ) ...era solo per mettere qualcosa di 'carino'....)
import javax.swing.*;
import java.awt.*;
public class ScrollBarTest extends JFrame
{
private final static String rowData [][] =
{
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
{ " ", " ", "[XI]", " ", " ", " ", " ", " ", "[XI]", " ", " " },
{ "[XI]", " ", " ", "[XI]", " ", " ", " ", "[XI]", " ", " ", "[XI]" },
{ "[XI]", " ", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", " ", "[XI]" },
{ "[XI]", "[XI]", "[XI]", " ", "[XI]", "[XI]", "[XI]", " ", "[XI]", "[XI]", "[XI]" },
{ "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]" },
{ " ", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", " " },
{ " ", " ", "[XI]", " ", " ", " ", " ", " ", "[XI]", " ", " " },
{ " ", "[XI]", " ", " ", " ", " ", " ", " ", " ", "[XI]", " " },
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
};
private final static String columnNames [] =
{
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"
};
public ScrollBarTest ()
{
// Table setup
final JTable table = new JTable (rowData, columnNames);
table.setBackground (Color.BLACK);
table.setForeground (Color.WHITE);
// ScrollPane setup
final JScrollPane sp = new JScrollPane (table);
sp.setBackground (Color.RED);
sp.getViewport ().setBackground (new Color (0x1A2D39));
// JFrame setup
getContentPane ().add (sp);
setTitle ("ScrollBar Test");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (236, 280);
setLocationRelativeTo (null);
// Tentativo 1
/*
final JButton btn = new JButton ();
btn.setEnabled (false);
sp.setCorner (ScrollPaneConstants.UPPER_RIGHT_CORNER, btn);
*/
// Tentativo 2
/*
final JScrollBar sb = sp.getVerticalScrollBar ();
getContentPane ().add (sb, BorderLayout.EAST);
*/
setVisible (true);
}
public static void main (String args [])
{
new ScrollBarTest ();
}
}
Grazie in anticipo.
...Passo subito al problema. : -)
Ho creato un semplice JScrollPane contenente una JTable e il suo relativo JTableHeader.
Quando la finestra viene ridimensionata verticalmente la scrollbar appare sotto l'header della JTable lasciando in alto a destra una 'zona vuota' evidenziata in rosso e corrispondente al colore di background dello JScrollPane.
Quello che invece vorrei riuscire a fare è affiancare orizzontalmente la vertical scrollbar all'header.
Ho fatto due prove per riuscire a risolvere il problema:
1) Ho aggiunto semplicemente un pulsante disabilitato per coprire l'area vuota.
Graficamente è migliore, ma è una soluzione stupida. :D
2) Usando 'BorderLayout.EAST' ho aggiunto la JScollBar ricavata dallo JScrollPane al JFrame. In questo modo sono riuscito ad affiancare la scrollbar all'header della JTable, ma cosi' risulta sempre visibile (indipendentemente dalla VerticalScrollBarPolicy dello JScrollPane) :(
Qualcuno ha qualche altra 'alternativa' da proporre? :)
Posto il codice:
(PS: non fate caso al 'contenuto' della tabella : ) ...era solo per mettere qualcosa di 'carino'....)
import javax.swing.*;
import java.awt.*;
public class ScrollBarTest extends JFrame
{
private final static String rowData [][] =
{
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
{ " ", " ", "[XI]", " ", " ", " ", " ", " ", "[XI]", " ", " " },
{ "[XI]", " ", " ", "[XI]", " ", " ", " ", "[XI]", " ", " ", "[XI]" },
{ "[XI]", " ", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", " ", "[XI]" },
{ "[XI]", "[XI]", "[XI]", " ", "[XI]", "[XI]", "[XI]", " ", "[XI]", "[XI]", "[XI]" },
{ "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]" },
{ " ", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", "[XI]", " " },
{ " ", " ", "[XI]", " ", " ", " ", " ", " ", "[XI]", " ", " " },
{ " ", "[XI]", " ", " ", " ", " ", " ", " ", " ", "[XI]", " " },
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
};
private final static String columnNames [] =
{
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"
};
public ScrollBarTest ()
{
// Table setup
final JTable table = new JTable (rowData, columnNames);
table.setBackground (Color.BLACK);
table.setForeground (Color.WHITE);
// ScrollPane setup
final JScrollPane sp = new JScrollPane (table);
sp.setBackground (Color.RED);
sp.getViewport ().setBackground (new Color (0x1A2D39));
// JFrame setup
getContentPane ().add (sp);
setTitle ("ScrollBar Test");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (236, 280);
setLocationRelativeTo (null);
// Tentativo 1
/*
final JButton btn = new JButton ();
btn.setEnabled (false);
sp.setCorner (ScrollPaneConstants.UPPER_RIGHT_CORNER, btn);
*/
// Tentativo 2
/*
final JScrollBar sb = sp.getVerticalScrollBar ();
getContentPane ().add (sb, BorderLayout.EAST);
*/
setVisible (true);
}
public static void main (String args [])
{
new ScrollBarTest ();
}
}
Grazie in anticipo.