我正在尝试创建一个时间线小部件,一个水平条。
class TimeBar extends JPanel {
public TimeBar(List<TimeRange> ranges) {
....
}
}
左边代表 00:00,右边代表 23:59。我必须用不同的颜色标记这个栏的一些片段(时间范围)。List<TimeRange>
时间范围(例如 {10:34 - 12:49, RED}, {13:31 - 17:03, BLUE})。timeRanges 之间不存在重叠。
该栏应该是可扩展的(当 mainFrame 改变大小时),但它的最小尺寸应该是 700 x 25。 TimeRangePanel 应该是可点击的。
我已经为 TimeBarPanel 使用 setLayout(null) 并为 TimeRangePanel 使用 setSize 和 setLocation。当 TimeBarPanel 改变大小时,我会重新计算 TimeBarPanel 的大小和位置。但是手动设置位置并为其使用 LayoutManager 并不是很好的做法。
public class TimeRange {
Date startTime,
Date endTime,
Color color
}
public class TimeBar extends JPanel
{
private List<TimeRange> ranges;
public TimeBar( List<TimeRange> ranges) {
this.ranges = ranges;
setLayout( null );
setBackground( Color.GRAY );
setMinimumSize( new Dimension( 720, 25 ) );
for(TimeRange range : ranges ) {
int startX = calculateStartPoint(range);
int widthX = calculateWidth(range)
TimeRangePanel panel = new TimeRangePanel(startX, widthX, range.color)
add(panel);
}
}
}
public class TimeRangePanel extends JPanel
{
public TimeRangePanel(int startX, int widthX, Color color) {
setBackground(color);
setSize(widthX, HEIGHT);
setLocation(startX, 0 );
setBounds(new Rectangle(new Point(startX, 1), getPreferredSize()));
}
}
哪个是实现这一点的最佳布局管理器。